In der Version 6.53 existiert ein Designfehler im cxGrid, wenn in der Event OnBeforePost eine Messagebox aufgerufen wird
procedure TForm1.dxMemData1BeforePost(DataSet: TDataSet); begin if MessageDlg('save record?', mtConfirmation,mbYesNo,0) <> mrYes then Abort; end;
Der Dialog sollte eigentlich so aussehen:
Durch den Fehler sieht es aber so aus:
Als Workaround wurde mir von DevExpress folgendes empfohlen:
procedure TForm1.dxMemData1BeforePost(DataSet: TDataSet); begin cxGrid1.Perform(WM_SETREDRAW, Integer(false), 0); try if MessageDlg('save record?', mtConfirmation, mbYesNo, 0) <> mrYes then Abort; finally cxGrid1.Perform(WM_SETREDRAW, Integer(true), 0); end; end;Tags: Delphi Delphi 2009 DevGrid
Download einer Datei mit der TDownLoadURL - Action. Da diese Komponente DLL's des IE nutzt, braucht der Entwickler keine weiteren Einstellungen (Proxy ...) vorsehen.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, ExtActns; type TForm1 = class(TForm) Button1: TButton; ProgressBar1: TProgressBar; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } procedure Progress(Sender: TDownLoadURL; Progress, ProgressMax: Cardinal; StatusCode: TURLDownloadStatus; StatusText: string; var Cancel: Boolean); public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin with TDownLoadURL.Create(nil) do try URL := 'http://../test.txt'; // URL der Datei Filename := '...\test.txt'; // Name der Datei OnDownloadProgress := Progress; // Status des Downloads anzeigen Execute; finally Free; end; end; procedure TForm1.Progress(Sender: TDownLoadURL; Progress, ProgressMax: Cardinal; StatusCode: TURLDownloadStatus; StatusText: string; var Cancel: Boolean); begin ProgressBar1.Max:=ProgressMax; ProgressBar1.Position:=Progress; Caption:=StatusText; end; end.Tags: Delphi Delphi 2009
DelForExp ist ein altes Opensource-Tool zur Formatierung von Delphi-Quellcode aus der IDE heraus. Es wurde von mir nur für Delphi 2009 und Windows Vista/7 angepasst.
Tags: Programme Freeware Delphi 2009unit MerkRecord; interface uses Classes,Variants; type // Dieser Rekord soll in der Liste enthalten sein TMerkRecord = Record I :integer; s :string; v : Variant; a :array of char; End; // die eigentliche Liste TMerkList = class(TList) private function GetItems(index: integer): TMerkRecord; protected // Freigabe des Speichers procedure Notify(Ptr: Pointer; Action: TListNotification); override; public // Zugriff auf den Rekord property Items[index :integer] :TMerkRecord read GetItems; default; // Neuen Record hinzufügen function Add(R :TMerkRecord) :integer; end; implementation type PMerkRecord = ^TMerkrecord; { TMerkList } function TMerkList.Add(R: TMerkRecord): integer; var P :PMerkRecord; begin P:= new(PMerkRecord); P^:=R; Result:=inherited Add(P); end; function TMerkList.GetItems(index: integer): TMerkRecord; begin Result:=PMerkRecord(inherited Items[Index])^; end; {Strings und dynamische Arrays müssen auf die Länge von 0 gesetzt werden. Da Variants alle Typen enthalten können, müssen sie auf NULL gesetzt werden} procedure TMerkList.Notify(Ptr: Pointer; Action: TListNotification); begin if Action=lnDeleted then begin PMerkRecord(Ptr).s:=''; PMerkRecord(Ptr).V:=Null; SetLength(PMerkRecord(Ptr).a,0); Dispose(Ptr); end; inherited; end; end.Tags: Delphi Delphi 2009
Beim Filtern einer Column mit Datumswerten sollen nur die Jahre angezeigt werden
Dadurch ist auch eine Mehrfachauswahl möglich. dafür sind 2 Schritte notwendig: Es müssen die Events OnGetFilterValues und OnInitFilteringDateRanges genutzt werden
procedure THWFilter.OnInitFilteringDateRanges(Sender: TcxCustomGridTableItem; ADateRanges: TcxGridDateRanges); begin ADateRanges.Add(TcxGridYearRange); // nach Jahren filtern end; procedure THWFilter.OnGetFilterValues(Sender: TcxCustomGridTableItem; AValueList: TcxDataFilterValueList); var z: integer; begin // löschen der einzelnen Tage for z := AValueList.Count - 1 downto 0 do if AValueList[z].Kind = fviValue then AValueList.Delete(z); end;Tags: Delphi Delphi 2009 DevGrid
Nach der Benutzung der Hilfe von Delphi 2009 lässt sich Windows XP nicht mehr beenden. Schuld daran ist der Prozess
dexplorer (Windows Hilfe)
Wenn dieser beendet wird, kann Windows wieder richtig beendet werden.
Tags: Windows Delphi Delphi 2009